iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
Python

從概念到應用:Python實戰開發學習之旅系列 第 28

[Day27] Python專案 - PowerBI複習&自動化&網頁自動登入 (PowerBI 、windwos工作排程、PyAutoGUI)

  • 分享至 

  • xImage
  •  

目標

https://ithelp.ithome.com.tw/upload/images/20241012/2012105267MCdSGxR0.png

昨天在power介紹完連結方式後
今天稍微複習一下power bi的資料檢視跟關聯功能

自動化power bi的方法
並且會帶入寫好的python丟到windows自動排程功能介紹
讓我們寫的Python可以自動依照時間執行

還有幾招好用的自動化輔助功能(螢幕截圖自動登入網頁等)

目標大綱:

  1. 複習PowerBI 以及 PowerBI可排程的方法
  2. Python Script自動化的設定

1. 複習PowerBI 以及 PowerBI可排程的方法

複習PowerBI資料表跟關聯模型的功能

tips - 安裝matplotlib

今天換一個新環境發現
如果沒有安裝這個套件可能會導致Python Script無法匯入進去
如果有遇到相關錯誤的麻煩先執行這行喔

pip install matplotlib

1. 資料檢視功能

資料檢視頁面可以看到有幾個常見功能

常用功能可以參考這邊

功能 說明
資料來源匯入 匯入多種資料來源如 Excel、CSV、資料庫等,並在 Power Query Editor 中進行資料處理。
欄位篩選與移除 移除不必要的欄位或僅保留有用欄位,精簡資料集。
新增計算欄 使用公式語法(M 語言)新增自訂欄位,如計算貨幣轉換等。
資料篩選與分類 根據條件篩選資料列,或將資料依照欄位進行分組,應用聚合函數。
合併與附加查詢 合併查詢(類似 SQL JOIN)將多個表合併,或附加查詢(類似 SQL UNION)將多表合併為一個。
資料格式轉換 將欄位的資料類型轉換為數值、文字或日期,或進行拆分和合併欄位操作。
移除重複值 檢查資料中的重複項並移除,以清理資料。
填補缺失值 用前一個值或指定值填補空欄,或移除有缺失值的資料列。
資料透視與逆透視 建立透視表(行轉列)或逆透視表(列轉行)來整理資料結構。
應用步驟與自動化 每個轉換操作都會記錄成步驟,可自動應用於資料刷新,保證一致的資料處理過程。
這邊要額外說明的是

轉換資料功能

https://ithelp.ithome.com.tw/upload/images/20241012/201210526Jj0OuhuCf.png

大家可以在資料檢視這邊看到轉換資料功能
從新彈出來的視窗我們可以觀察到
可以透過內建功能或是透過Power Query Editor來去編輯資料的格式(Power Query就很像是PowerBI 的程式語言)

我們可以透過這個介面看到資料怎麼InputOutput
也可以透過右邊的步驟區域來選擇是否返回上一動作,或是修改編輯(超強的流程控制功能)

如果確認無誤之後可以點選右邊的儲存並關閉

關聯Model 補充說明

功能 說明
表格關聯(Relationships) 顯示並管理不同表格之間的關聯,建立、編輯或刪除表格之間的關係,實現跨表資料分析。
多對一與一對一關係 支援「多對一」或「一對一」關係設置,確保表格資料正確連結。
自訂欄位和度量值 在模型檢視中新增自訂計算欄位和度量值(Measures),方便進行複雜運算。
方向性設定(Cross-filtering Direction) 設定過濾方向(單向或雙向),影響報表中資料的篩選方式。
資料分類與格式設定 設定欄位的資料類型(如數字、文字、日期等)及格式,確保資料在分析中正確顯示。
隱藏不需要的欄位 隱藏不需要的欄位,讓報表視覺化更簡潔,僅顯示相關欄位。

tips - 資料模型檢視
https://ithelp.ithome.com.tw/upload/images/20241012/20121052x3wd5MBPvi.png

從這邊可以看到關聯模型畫面
我們可以看到customers的useridsheet1的userid 自動連結

可以點選進階管理器
https://ithelp.ithome.com.tw/upload/images/20241012/201210523lC3135wUN.png

在這邊可以自動調整powerbi的關聯對應
也可以建立關係模組

tips - 關聯類型

https://ithelp.ithome.com.tw/upload/images/20241012/20121052O3UDl5zgct.png

符號說明

|| 表示「一」
o{ 和 }o 表示「多」
連接線之間的關係文字描述了具體的關係,例如 "has", "belongs to", "manages", "enrolls in"。
關係類型 術語 說明 範例
一對一 One-to-One (1:1) 每個表中的每一行與另一表中的唯一一行相關聯。 每位使用者僅有一個個人檔案。
一對多 One-to-Many (1:N) 一個表中的每一行可以與另一表中的多行相關聯。 一個客戶可以擁有多個訂單。
多對一 Many-to-One (N:1) 多行來自一個表的資料與另一表中的唯一一行相關聯。 多個訂單可以由同一位客戶擁有。
多對多 Many-to-Many (M:N) 表中的多行可以與另一表中的多行相關聯,通常需要一個聯接表。 學生可以選擇多門課程,每門課程有多位學生。

也因為這個關係
我們才可以透過userid的綁訂把最後圖表做出來喔
https://ithelp.ithome.com.tw/upload/images/20241012/20121052ZifpFPBfPe.png

PowerBI可排程的方法

在執行自動排成更新資料前,先給大家看一下限制

方法 說明 條件限制
Power BI Service 排程 在 Power BI 服務中設定資料集的自動刷新排程。 - 需將報表發佈到 Power BI 服務。- 依帳戶計劃(Pro 或 Premium)限制刷新次數。
Power BI Desktop 手動刷新 在 Power BI Desktop 中手動刷新資料集以獲取最新數據。 - 每次必須手動操作。
使用 PowerShell 指令 利用 PowerShell 腳本透過 Power BI API 自動更新資料集。 - 需要適當的 API 權限和授權。- 需掌握 PowerShell 語法及相關指令。
使用資料閘道 若資料來源在本地端,可以使用資料閘道來允許 Power BI 服務訪問本地資料。 - 需正確設置資料閘道,並確保資料來源連接正常。
Power Automate 使用 Power Automate 自動化刷新過程,根據條件觸發資料集刷新。 - 需具備 Power Automate 訂閱和權限。- 需設定觸發條件和流程。
API 調用 透過 REST API 調用自動刷新 Power BI 資料集。 - 需具備適當的 API 權限和授權。- 需編寫相應的程式碼以實現調用。
使用 Power BI Gateway 設定 Power BI Gateway 以支持本地資料源的排程刷新。 - 需安裝和配置資料閘道。- 需確保資料來源可在資料閘道下訪問。

PowerBI Desktop手動更新

https://ithelp.ithome.com.tw/upload/images/20241012/20121052JHYS0lzMAh.png

如果是本機的powerbi我們透過手動點選重新整理資料 來更新資料
或是有透過案件模擬的方式來開啟報表操作重新整理

PowerBI Server

微軟官方操作文件

如果你的公司或是有自己上傳到server上的話
就可以透過排成設定來更新資料來源
如微軟官方得這張圖
https://ithelp.ithome.com.tw/upload/images/20241012/20121052sABCuVcBs6.png

排程所需注意事項

注意事項 說明
資料來源的認證 確保所有資料來源都已正確設置認證。如果資料來源需要認證,需在 Power BI Server 上提供有效的憑證。
資料閘道(Gateway)設置 若使用本地資料來源,必須安裝和配置 Power BI Gateway。確保資料閘道運行正常且連接到 Power BI Service。
排程刷新時間 設定合理的排程刷新時間,避免在使用高峰期間進行刷新,以減少對性能的影響。
刷新頻率限制 根據 Power BI 的計劃(如 Pro 或 Premium),檢查每日刷新次數的限制。
資料集大小限制 確保資料集不超過 Power BI Server 的大小限制,特別是在處理大型資料集時。
報表權限 確保用戶擁有適當的權限來查看和刷新報表。如果用戶沒有足夠的權限,可能無法查看最新資料。
錯誤處理 設定警報和通知,以便在刷新失敗時及時獲得通知,方便排查問題。
背景資料刷新 如果需要,考慮啟用背景資料刷新功能,這樣用戶在查看報表時可以獲取最新資料。
執行計劃 檢查執行計劃,確保在特定時間點不會有多個資料集同時進行刷新,以免影響性能。

3.Python自動化

透過windwos 內建排程管理員執行

步驟大概是這樣
https://ithelp.ithome.com.tw/upload/images/20241012/20121052xUCPcId9EQ.png

Step 1. 輸入執行排程管理

按下Win +R執行這個

taskschd.msc

https://ithelp.ithome.com.tw/upload/images/20241012/20121052biZm95OnW6.png

Step 2. 點選建立基本工作

https://ithelp.ithome.com.tw/upload/images/20241012/20121052RfigAqJTsD.png

Step 3. 觸發條件

可以選每天比較簡單
https://ithelp.ithome.com.tw/upload/images/20241012/20121052cwxL5JDKgf.png

為了好Demo我選21:20分來測試
https://ithelp.ithome.com.tw/upload/images/20241012/201210520UTZY64QKv.png

Step 4. Python 選擇啟動程式跟檔案

https://ithelp.ithome.com.tw/upload/images/20241012/20121052Elwdym6QD1.png

程式執行碼

C:\Users\User\AppData\Local\Programs\Python\Python312\python.exe

如果不知道python可以打where python

新增引述這邊需要點選執行的python script

C:\Users\User\Desktop\crawl\yahoo.py

如果是我使用我們之前爬蟲學到的程式自動存檔要多加一個斜線\

# 將數據保存到Excel文件
df.to_excel('C:\\Users\\User\\Desktop\\crawl\\stock_data.xlsx', index=False)
print("數據已成功保存到2330_stock_data.xlsx文件中。")

第一個斜線是跳脫字元
跳脫字元(escape characters)是用來表示一些特殊字符或控制符的字元序列,通常以反斜線(\)開頭。這些跳脫字元在字符串中有特定的含義,用來插入那些難以直接輸入的字符或具有特殊含義的字符。

常見跳脫字元列表

跳脫字元 描述 例子 結果
\\ 反斜線符號(backslash) "C:\\path\\file" C:\path\file
\' 單引號 'It\'s Python' It's Python
\" 雙引號 "He said \"Hi\"" He said "Hi"
\n 換行(newline) "Hello\nWorld" Hello World
\t 制表符(tab) "Hello\tWorld" Hello World
\r 回車(carriage return) "Hello\rWorld" World 覆蓋 Hello
\b 退格符(backspace) "Hello\bWorld" HellWorld
\f 換頁符(form feed) "Hello\fWorld" Hello World(換頁)
\a 鈴聲(alert or bell) "Hello\aWorld" (系統發出鈴聲)
\v 垂直制表符(vertical tab) "Hello\vWorld" Hello(垂直空格)World
\0 空字元(null character) "Hello\0World" Hello(空字符無輸出)
\xhh 以16進制表示的字元 "\x48\x65\x6C\x6C\x6F" Hello
\uhhhh 以Unicode表示的字元(16位元) "\u0048\u0065" He
\Uhhhhhhhh 以Unicode表示的字元(32位元) "\U0001F600" 😀 (笑臉表情)

PyAutoGUI 模擬鍵盤滑鼠的功能

pip install pyautogui
import pyautogui

# 截取整個螢幕的畫面
screenshot = pyautogui.screenshot()

# 保存截圖到指定路徑
screenshot.save('screenshot.png')

https://ithelp.ithome.com.tw/upload/images/20241012/20121052imWwV29Spm.png

selenium 網頁自動登入

如果你想要自動登入喜歡的網頁做點事情

本文以學習目的非營利或販售等事項

可以透過前面學到的Selenuum執行

https://ithelp.ithome.com.tw/upload/images/20241012/20121052k5IsDBQqSf.png

大概的步驟就是

  1. 拆解登入的觸發button
  2. 查看相關的html tag以及class定位目標
  3. 查看帳號跟密碼的class
  4. 通常輸入完帳號密碼可以執行enter的按鍵事件觸發送出
  5. 把script按造步驟處理

我們可以看到登入button的html tag

<div role="button" class="xxxx">登入/註冊</div>

接者就是要告訴python點集登入後輸入帳號跟密碼
自於位置也要去查看帳號跟密碼位置

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time

# 設定帳號和密碼
username = 'your_account'  # 替換為你的 網頁帳號
password = 'passowrd'    # 替換為你的 網頁密碼

# 設置 Chrome 的無痕模式
options = webdriver.ChromeOptions()
options.add_argument('--incognito')
driver = webdriver.Chrome(options=options)

# 打開 xxx首頁
driver.get('https://www.example.com')

# 等待頁面加載
time.sleep(5)

# 定位登入/註冊按鈕並點擊
login_register_button = driver.find_element(By.XPATH, "//div[@role='button' and contains(text(), '登入/註冊')]")
login_register_button.click()

# 等待登入畫面彈出
time.sleep(5)  # 調整等待時間確保登入框加載完成

# 定位帳號輸入框並輸入帳號
username_input = driver.find_element(By.CLASS_NAME, 'accounut class')  # 使用適當的 class 名稱
username_input.send_keys(username)

# 定位密碼輸入框並輸入密碼
password_input = driver.find_elements(By.CLASS_NAME, 'password class')[1]  # 使用索引獲取第二個元素
password_input.send_keys(password)

# 發送回車鍵 (Enter) 提交登入
password_input.send_keys(Keys.RETURN)

# 等待幾秒以確認是否登錄成功
time.sleep(5)

# 關閉瀏覽器
driver.quit()

建議自己在爬蟲前可詳細閱讀該網站的規範
或是真的不確定可以詢問網站管理員喔~!! 以免觸法

自動化跟爬蟲的道德說明

項目 說明
使用條款與隱私政策 大多數網站的使用條款會規範是否允許自動化工具的使用,違反可能會被封禁帳號。
是否允許自動化工具 一些網站明確禁止自動化工具登入或數據抓取,違反可能帶來法律風險或限制訪問。
個人資料保護 使用他人帳號自動化登入未經授權可能涉及隱私法規,如 GDPR、CCPA,這可能是違法的。
登入自己的帳號 使用自動化工具登入自己的帳號通常沒問題,但仍需遵守網站的條款和政策。
登入他人帳號 未經他人授權使用其帳號進行自動化登入可能涉及非法行為,如帳號劫持。
電腦犯罪法 未經授權存取、修改他人帳號資料可能觸犯電腦犯罪相關法律,如《CFAA》。
道德考量 即便不違法,自動化登入可能對伺服器產生壓力,影響其他用戶體驗,屬於不道德行為。
建議 1. 登入自己的帳號可行,需遵守網站條款。2. 未經授權使用他人帳號可能違法。

總結

好啦~爬蟲跟自動化就進入到尾聲拉。/images/emoticon/emoticon12.gif
Python 是一個功能強大且靈活的語言,特別是在處理自動化任務方面表現卓越。學習自動化和網頁自動登入,可以幫助開發者解決日常重複性工作,提高生產力,減少手動操作的錯誤。然而,在使用這些工具時,我們也需要平衡效率與道德、法律的約束

優點 缺點 應用場景
節省時間與精力,減少重複性工作 可能違反網站的使用條款,帶來法律風險 日常登入自動化處理,簡化工作流程
自動化流程降低手動操作錯誤 網頁結構變動可能導致腳本失效,需要維護 自動化抓取數據進行分析,例如電商、金融領域
具有靈活性,可針對不同場景應用 自動化操作對伺服器有負擔,可能影響其他用戶 軟體測試與應用程式部署中的自動化測試

上一篇
[Day26] Python專案 - PowerBI - 視覺化你的報表(Excel、MongDB、Python結合)
下一篇
[Day28] Python專案 - 人工智能的開端與Python的共舞(1) 機器學習(預測股票、分類男女生)
系列文
從概念到應用:Python實戰開發學習之旅31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言